package com.foo.designpattern.templatemethod;

/**
 * com.foo.designpattern.templatemethod
 * Created with IntelliJ IDEA.
 * Created by jiang on 2016-05-13 15:08.
 *
 * @Description 具体模板角色(Concrete Template)
 * 具体模板角色(Concrete Template)有如下责任：
 * 1、实现父类所定义的一个或多个抽象方法，他们是一个顶级逻辑的组成步骤。
 * 2、每一个抽象模板角色都可以有任意多个具体模板角色与之对应，而每一个具体模板角色都可以
 * 给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现，从而使得顶级逻辑的实现各不相同。
 * <p/>
 * 具体模板角色类实现了父类所声明的基本方法：
 * abstractMethod() 方法所代表的就是父类强制子类实现的剩余逻辑，
 * hookMethod() 方法是可选择实现的逻辑，不是必须实现的。
 */

public class ConcreteTemplateA extends AbstractTemplate {
    /**
     * abstractMethod() 的实现
     * 生产不同内存的手机
     */
    @Override
    protected void makeDifferentRAM() {
        System.out.println("给该手机配置2G运行内存");
    }

    /**
     * abstractMethod() 的实现
     * 生产不同操作系统的手机
     */
    @Override
    protected void makeDifferentOS() {
        System.out.println("给该手机安装 Android4.4.2 操作系统");
    }

    /**
     * abstractMethod() 的实现
     * 生产不同颜色的手机
     */
    @Override
    protected void makeDifferentColor() {
        System.out.println("将该手机的颜色喷绘成冰川白色");
    }

    /**
     * abstractMethod() 的实现
     * 重写父类方法，可选择实现的方法
     */
    @Override
    protected void makeDifferentBrand() {
        System.out.println("手机品牌：贴牌小米");
    }
}
